package com.pe.pgn.clubpgn.webapp.controller.unidadmedida;

import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.support.SessionStatus;

import com.pe.pgn.clubpgn.common.CLPConstantes;
import com.pe.pgn.clubpgn.domain.ClpdUnidadMedida;
import com.pe.pgn.clubpgn.service.UnidadMedidaService;
import com.pe.pgn.clubpgn.webapp.controller.BaseFormController;

@Controller
@RequestMapping("/unidadmedida/**")
public class UnidadMedidaController extends BaseFormController {

	@Autowired
	private UnidadMedidaService unidadMedidaService;
    	
	@RequestMapping(value = "/unidadmedidalist.html")
    public void listarUnidadesMedida(Model model) {

		List<ClpdUnidadMedida> unidadesMedida = unidadMedidaService.obtenerUnidadesMedida();
		model.addAttribute("unidadesMedida", unidadesMedida);
    }
	
	@RequestMapping(value = "/unidadmedidaform.html", method = RequestMethod.GET)
	public @ModelAttribute("unidadMedida") ClpdUnidadMedida verUnidadMedida(
				@RequestParam(value = "id", required = false) Long id, Model model) {

		if (id != null) {
			ClpdUnidadMedida unidadMedida = unidadMedidaService.obtenerUnidadMedida(id);
			return unidadMedida;
		}
		return new ClpdUnidadMedida();
	}
	
	@SuppressWarnings("unchecked")
	@RequestMapping(value = "/unidadmedidaform.html", method = RequestMethod.POST)
	public String guardarUnidadMedida(@ModelAttribute("unidadMedida") ClpdUnidadMedida unidadMedida,
			BindingResult result, SessionStatus status, HttpServletRequest request, Model model) {

		try {

			if (result.hasErrors()) {
				model.addAttribute("unidadMedida", unidadMedida);
				return "/unidadmedida/unidadmedidaform";
			}

			Map mapMsg = unidadMedidaService.guardarUnidadMedida(unidadMedida);
			if(mapMsg.get(CLPConstantes.MSG).toString().equals(CLPConstantes.SUCCESS)){
				saveMessage(request, getText("unidadmedidaform.added", 
				unidadMedida.getDeUnidadMedida(), request.getLocale()));
			        return "redirect:unidadmedidalist.html";
			}else{
				
				if(mapMsg.get("detalle") != null){
					saveError(request, mapMsg.get("detalle").toString());
					return "/unidadmedida/unidadmedidaform";
				}else{
					saveError(request, getText("errors.general", request.getLocale()));
					return "/unidadmedida/unidadmedidaform";
				}			
			}
			
		} catch (Exception e) {
			saveError(request, getText("errors.general", request.getLocale()));
			return "/unidadmedida/unidadmedidaform";
		}

	}	
	
	@RequestMapping(value = "/eliminarunidadmedida.html")
	public String eliminarUnidadMedida(@RequestParam(value = "id", required = false) Long id, 
			HttpServletRequest request, Model model) {

		try {

			unidadMedidaService.eliminarUnidadMedida(id);
			saveMessage(request, getText("unidadmedidaform.deleted", request.getLocale()));
			return "redirect:unidadmedidalist.html";
			
		} catch (Exception e) {
			ClpdUnidadMedida unidadMedida = unidadMedidaService.obtenerUnidadMedida(id);
			model.addAttribute("unidadMedida", unidadMedida);
			saveError(request, getText("errors.general", request.getLocale()));
			return "/unidadmedida/unidadmedidaform";
		}

	}		
}
